キャッシュ概要
=======

キャッシュはウェブアプリケーションのパフォーマンスを改善する安価で効果的な方法です。
比較的静的なデータをキャッシュに保存し、リクエストがあった時にそれをキャッシュから提供することによって、データを生成するための時間を節約する事ができます。

Yii においてキャッシュを利用するためには、主として、キャッシュアプリケーションコンポーネントを設定してアクセスすることが必要です。
次のアプリケーション初期設定は、2台のキャッシュサーバで memcache を使用するキャッシュコンポーネントを指定しています。

~~~
[php]
array(
	......
	'components'=>array(
		......
		'cache'=>array(
			'class'=>'system.caching.CMemCache',
			'servers'=>array(
				array('host'=>'server1', 'port'=>11211, 'weight'=>60),
				array('host'=>'server2', 'port'=>11211, 'weight'=>40),
			),
		),
	),
);
~~~

アプリケーションが動作しているときは、`Yii::app()->cache` でキャッシュコンポーネントにアクセスできます。

Yii は、異なるメディアにキャッシュデータを保存することができる、多様なキャッシュコンポーネントを提供します。
たとえば、[CMemCache] コンポーネントは PHP memcache 拡張をカプセル化し、キャッシュストレージのメディアとしてメモリを使用します。
[CApcCache] コンポーネントは、PHP APC 拡張をカプセル化します。
[CDbCache] コンポーネントは、キャッシュデータをデータベースに保存します。
以下は、利用可能なキャッシュコンポーネントの概要です:

   - [CMemCache]: PHP [memcache 拡張](http://www.php.net/manual/en/book.memcache.php) を使用します。

   - [CApcCache]: PHP [APC 拡張](http://www.php.net/manual/en/book.apc.php) を使用します。

   - [CXCache]: PHP [XCache 拡張](http://xcache.lighttpd.net/) を使用します。

   - [CEAcceleratorCache]: PHP[EAccelerator拡張](http://eaccelerator.net/) を使用します。

   - [CRedisCache]: ストレージバックエンドとして [redis](http://redis.io/) key-value データストアを使用します。

   - [CDbCache]: データベーステーブルを使用してキャッシュデータを保存します。
デフォルトでは、ランタイムディレクトリ下に SQLite3 データベースを作り、使用します。
[connectionID|CDbCache::connectionID] プロパティを設定することで、明示的にデータベースを指定することができます。

   - [CZendDataCache]: キャッシュメディアとして [Zend Data Cache](http://files.zend.com/help/Zend-Server-6/zend-server.htm#data_cache_component.htm) を使用します。

   - [CWinCache]: PHP [WinCache](http://iis.net/downloads/microsoft/wincache-extension) 拡張を使用します。
   ([PHP 用の Windows キャッシュ](http://php.net/manual/ja/book.wincache.php) も参照して下さい。)

   - [CFileCache]: キャッシュデータを保存するのにファイルを使用します。これはページのような大きなかたまりのデータに特に適しています。

   - [CDummyCache]: なにもキャッシュを行わないダミーキャッシュを提供します。
このコンポーネントの目的は、キャッシュが利用できることをチェックするためのコードを簡略化することです。
たとえば、開発中やサーバに実際のキャッシュサポートがない場合に、このキャッシュコンポーネントを使用することが出来ます。
そして、実際のキャッシュサポートが有効になったときに、対応するキャッシュコンポーネントに切替えて使用します。
どちらの場合も、`Yii::app()->cache` が `null` かも知れないと心配せずに、データを取得するために同じコード `Yii::app()->cache->get($key)` を使用できます。

> Tip|ヒント: これら全てのキャッシュコンポーネントは同じベースクラス [CCache] より継承されているため、コードの修正なしに、異なるタイプのキャッシュを利用する事ができます。

キャッシュは、異なるレベルで使用することが可能です。
一番低いレベルでは、変数のような、単一のデータを保持するためにキャッシュを利用します。これを **データキャッシュ** と呼びます。
次のレベルでは、キャッシュにビュースクリプトの一部で生成されたページの断片を保持します。
また、一番高いレベルでは、キャッシュにページ全体を保持し、必要に応じてキャッシュからページを提供します。

次のいくつかの節では、これらの異なるレベルでキャッシュを使用する方法を詳しく述べます。

> Note|注意: 定義によって、キャッシュは揮発性のストレージメディアです。
それは、有効期限内であっても、キャッシュデータの存在を保証しません。
したがって、永続的なストレージとしてキャッシュを使用しないでください (たとえば、セッションデータを保存するために、キャッシュを用いてはいけません)。
